// 泛型类--在定义类时, 为类中的属性或方法定义泛型类型 在创建类的实例时, 再指定特定的泛型类型
(() => {
  // 定义一个类，类中的属性值的类型是不确定的，方法中的参数及返回值的类型也不确定
  class GenericNumber<T> {
    zeroValue: T;
    add: (x: T, y: T) => T;
  }
  //   在实例化类的对象时，再确定泛型的类型
  let gNum = new GenericNumber<number>();
  //   设置属性值
  gNum.zeroValue = 0;
  //   相加的方法
  gNum.add = function (x, y) {
    return x + y;
  };
//   在实例化对象的时候，再确定泛型的类型
  let gStr = new GenericNumber<string>();
  gStr.zeroValue = "abc";
  gStr.add = function (x, y) {
    return x + y;
  };

  console.log(gStr.add(gStr.zeroValue, "test"));
  console.log(gNum.add(gNum.zeroValue, 12));
})();
